package main

import "fmt"

/*===select===
	- 注意，每个case 必须匹配的是一个I/O操作
  - 从多个通道接收(取)/发送（存) 数据
	- 一个 select 语句中，Go语言会按顺序从头至尾评估每一个发送和接收的语句。
		如果其中的任意一语句可以继续执行（即没有被阻塞），那么就从那些可以执行的语句中任意选择一条来使用。
*/
func main() {
	ch := make(chan int, 1)
	/* [流程]
	i=0时；管道中无值，所以执行 ch <- i，向管道存值；
	i=1时；取出管道值，0，打印
	i=2时；管道无值，所以执行 ch <- i,向管道存值；
	i=3时；管道有值，2，取出，打印
	...
	*/

	for i := 0; i < 10; i++ {
		select {
		case x := <-ch:
			fmt.Println(x)
		case ch <- i:
		default:
			fmt.Println("啥也不干")
		}
	}
}
